# PowerShell脚本用于编译和运行C#测试文件
# 用法: .\run_test.ps1 <测试文件路径>

param(
    [Parameter(Mandatory=$true)]
    [string]$TestFile
)

# 检查测试文件是否存在
if (-not (Test-Path $TestFile)) {
    Write-Error "测试文件不存在: $TestFile"
    exit 1
}

# 获取测试文件的目录和文件名
$TestDir = Split-Path $TestFile -Parent
$TestFileName = Split-Path $TestFile -Leaf
$TestName = [System.IO.Path]::GetFileNameWithoutExtension($TestFileName)

# 设置输出可执行文件路径
$OutputExe = Join-Path $TestDir "$TestName.exe"

# 主程序路径（在bin\Debug目录下）
$MainExe = "E:\cs\MouseKeyboardOperationSimulator\MouseKeyboardOperationSimulator\bin\Debug\MouseKeyboardOperationSimulator.exe"

# 检查主程序是否存在
if (-not (Test-Path $MainExe)) {
    Write-Error "主程序不存在: $MainExe"
    exit 1
}

# 设置C#编译器路径
$CscPath = "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe"

# 检查C#编译器是否存在
if (-not (Test-Path $CscPath)) {
    Write-Error "C#编译器不存在: $CscPath"
    exit 1
}

Write-Host "正在编译测试文件: $TestFile"
Write-Host "输出文件: $OutputExe"
Write-Host "引用文件: $MainExe"

# 编译测试文件
& $CscPath /reference:$MainExe /out:$OutputExe $TestFile

# 检查编译是否成功
if ($LASTEXITCODE -ne 0) {
    Write-Error "编译失败"
    exit $LASTEXITCODE
}

Write-Host "编译成功!"

# 运行测试程序
Write-Host "正在运行测试程序: $OutputExe"

# 将主程序复制到测试文件所在目录，以确保运行时能找到依赖项
$MainExeDir = Split-Path $MainExe -Parent
$TestExeDir = Split-Path $OutputExe -Parent

# 复制主程序及其依赖项到测试目录
Copy-Item $MainExe $TestExeDir -Force

# 复制主程序目录中的所有dll文件到测试目录
Get-ChildItem $MainExeDir -Filter "*.dll" | ForEach-Object {
    Copy-Item $_.FullName $TestExeDir -Force
}

# 在测试文件所在目录运行测试程序
Push-Location $TestExeDir
try {
    & ".\$TestName.exe"
} finally {
    Pop-Location
}